# __init__() 初始化方法
# 所有双下划线开头和双下划线结尾的 ，都是魔术方法
class People:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __str__(self):
        """
        :return: 直接打印对象时，会执行这里的内容
        """
        return "<name:%s age%s>"%(self.name,self.age)
    def run(self):
        return self.name
"""
if __name__ == '__main__':
    # 通过People创建p1对象
    p1 = People("刘超",99)
    print(p1)   # <刘超 99>
"""

class Foo:
    def __init__(self,x,filepath,encoding='utf-8'):
        self.x = x
        self.f = open(filepath,'r',encoding=encoding)
    def __del__(self):
        """
        :return: 当检测到对象没有做后续动作时，会自动回收资源（会自动执行这里方法）
        """
        print("我是班长")
"""
if __name__ == '__main__':
    # 创建一个对象
    obj = Foo(1,'stu.txt')
    print(obj.f.read())
"""
class Foo1:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def __call__(self,*args,**kwargs):
        """
        可以把对象当成方法来调用
        这个时候就会执行这里代码块
        :param args:
        :param kwargs:
        :return:
        """
        print(self,args,kwargs)
    def run(self):
        print('run')
if __name__ == '__main__':
    obj1 = Foo1(1,2)
    obj1("5",name='张三')     # <object Foo1 0x0090999787> ("5",) {"name":"张三"}

















